Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Commit 6f8f4351f654dd0445e25ca6c0fb59bdcc19723a


Parents : cd323c9
Author : Mark Qvist <mark@unsigned.io>
Date : 2026-04-21T10:24:07+02:00

Fixed message loading performance

Changes

3 files changed, 29 insertions(+), 17 deletions(-)


Diff

diff --git a/sbapp/main.py b/sbapp/main.py
index 9e8be466..e98400b8 100644
--- a/sbapp/main.py
+++ b/sbapp/main.py
@@ -449,6 +449,7 @@ else:
from ui.objectdetails import ObjectDetails
from ui.announces import Announces
from ui.messages import Messages, ts_format, messages_screen_kv
+ # from ui.messages_recycle import Messages, ts_format, messages_screen_kv
from ui.helpers import ContentNavigationDrawer, DrawerList, IconListItem
from ui.helpers import multilingual_markup, mdc, dark_theme_text_color
from kivymd.toast import toast

diff --git a/sbapp/sideband/core.py b/sbapp/sideband/core.py
index 367ba9b9..0b7d4db8 100644
--- a/sbapp/sideband/core.py
+++ b/sbapp/sideband/core.py
@@ -2999,19 +2999,32 @@ class SidebandCore():
with self.db_lock:
db = self.__db_connect()
dbc = db.cursor()
-
+
+ base_condition = "(dest=:context_dest or source=:context_dest)"
if after != None and before == None:
- query = "select * from lxm where (dest=:context_dest or source=:context_dest) and rx_ts>:after_ts"
- dbc.execute(query, {"context_dest": context_dest, "after_ts": after})
+ query = f"select * from lxm where {base_condition} and rx_ts>:after_ts ORDER BY rx_ts DESC"
+ params = {"context_dest": context_dest, "after_ts": after}
+ if limit is not None:
+ query += f" LIMIT :limit_val"; params["limit_val"] = int(limit)
+ dbc.execute(query, params)
elif after == None and before != None:
- query = "select * from lxm where (dest=:context_dest or source=:context_dest) and rx_ts<:before_ts"
- dbc.execute(query, {"context_dest": context_dest, "before_ts": before})
+ query = f"select * from lxm where {base_condition} and rx_ts<:before_ts ORDER BY rx_ts DESC"
+ params = {"context_dest": context_dest, "before_ts": before}
+ if limit is not None:
+ query += f" LIMIT :limit_val"; params["limit_val"] = int(limit)
+ dbc.execute(query, params)
elif after != None and before != None:
- query = "select * from lxm where (dest=:context_dest or source=:context_dest) and rx_ts<:before_ts and rx_ts>:after_ts"
- dbc.execute(query, {"context_dest": context_dest, "before_ts": before, "after_ts": after})
+ query = f"select * from lxm where {base_condition} and rx_ts<:before_ts and rx_ts>:after_ts ORDER BY rx_ts DESC"
+ params = {"context_dest": context_dest, "before_ts": before, "after_ts": after}
+ if limit is not None:
+ query += f" LIMIT :limit_val"; params["limit_val"] = int(limit)
+ dbc.execute(query, params)
else:
- query = "select * from lxm where dest=:context_dest or source=:context_dest"
- dbc.execute(query, {"context_dest": context_dest})
+ query = f"select * from lxm where {base_condition} ORDER BY rx_ts DESC"
+ params = {"context_dest": context_dest}
+ if limit is not None:
+ query += f" LIMIT :limit_val"; params["limit_val"] = int(limit)
+ dbc.execute(query, params)
result = dbc.fetchall()
@@ -3034,10 +3047,8 @@ class SidebandCore():
lxm.paper_packed = paper_packed_lxm
extras = None
- try:
- extras = msgpack.unpackb(entry[11])
- except:
- pass
+ try: extras = msgpack.unpackb(entry[11])
+ except: pass
message = {
"hash": lxm.hash,
@@ -3054,8 +3065,9 @@ class SidebandCore():
}
messages.append(message)
- if len(messages) > limit:
- messages = messages[-limit:]
+
+ messages.reverse()
+ if len(messages) > limit: messages = messages[-limit:]
return messages
def _db_save_lxm(self, lxm, context_dest, originator = False, own_command = False, is_retry = False):

diff --git a/sbapp/ui/messages.py b/sbapp/ui/messages.py
index 8c9e8968..5e2026b8 100644
--- a/sbapp/ui/messages.py
+++ b/sbapp/ui/messages.py
@@ -271,8 +271,7 @@ class Messages():
else: self.hide_widget(self.ids.message_ptt, True)
c_ts = time.time()
- if len(self.new_messages) > 0:
- self.update_widget()
+ if len(self.new_messages) > 0: self.update_widget()
if (len(self.added_item_hashes) < self.db_message_count) and not self.load_more_button in self.list.children:
self.list.add_widget(self.load_more_button, len(self.list.children))


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────